#ifndef MATRIX_OPERATIONS_H
#define MATRIX_OPERATIONS_H

#include <Eigen/Dense>
#include <iostream>
#include <string>

class MatrixOperations {
public:
    // 矩阵创建功能
    static Eigen::MatrixXd createMatrixFromConsole();
    static Eigen::MatrixXd createFixedSizeMatrix(int rows, int cols);
    static Eigen::MatrixXd createZeroMatrix(int rows, int cols);
    static Eigen::MatrixXd createIdentityMatrix(int size);
    static Eigen::MatrixXd createOnesMatrix(int rows, int cols);
    static Eigen::MatrixXd createRandomMatrix(int rows, int cols);
    
    // 基本运算功能
    static Eigen::MatrixXd addMatrices(const Eigen::MatrixXd& A, const Eigen::MatrixXd& B);
    static Eigen::MatrixXd subtractMatrices(const Eigen::MatrixXd& A, const Eigen::MatrixXd& B);
    static Eigen::MatrixXd multiplyMatrixScalar(const Eigen::MatrixXd& A, double scalar);
    static Eigen::MatrixXd multiplyMatrices(const Eigen::MatrixXd& A, const Eigen::MatrixXd& B);
    static Eigen::MatrixXd transposeMatrix(const Eigen::MatrixXd& A);
    
    // 矩阵属性功能
    static void printMatrixProperties(const Eigen::MatrixXd& A, const std::string& name = "Matrix");
    static std::pair<int, int> getMatrixSize(const Eigen::MatrixXd& A);
    static bool isMatrixEmpty(const Eigen::MatrixXd& A);
    
    // 工具函数
    static void printMatrix(const Eigen::MatrixXd& A, const std::string& name = "Matrix");
    static int getIntegerInput(const std::string& prompt);
    static double getDoubleInput(const std::string& prompt);
};

#endif // MATRIX_OPERATIONS_H